// let body = document.body
// console.log(body)
// body.onclick = function() {
//     // 事件触发，方法执行，方法中的THIS是BODY
//     console.log(this)
// }

// body.addEventListener('click', function() {
//     console.log(this)
// })

// "use strict";
// (function () {
//     console.log(this)
// })();


// let obj = {
//     fn: (function() {
//         console.log(this)
//         return function() {}
//     })() // 把自执行函数执行的返回值赋值给obj.fn
// }

// function func() {
//     console.log(this)
// }
// let obj = {
//     func: func
// }
// func() // window
// obj.func() // obj


// let obj = {
//     func: function() {
//         console.log(this)
//     },
//     sum: () => {
//         console.log(this)
//     }
// }
// obj.func() // obj
// obj.sum() // window

// let obj = {
//     i: 0,
//     func() {
//         // 这里的this是obj

//         setTimeout(function() {
//             // 回调函数 THIS： window, 回调函数中的this一般都是window
//             console.log(this)
//             this.i++
//             console.log(obj)
//             // 基于bund把函数中的this预先处理为obj
//         }.bind(this), 1000)
//     }
// }
// obj.func()


let obj = {
    i: 0,
    func() {
        // 这里的this是obj

        setTimeout(() => {
            // 箭头函数中没有自己的this，用的this是上下文中的this，也就是obj
            console.log(this)
            this.i++
            console.log(obj)
        }, 1000)
    }
}
obj.func()